SlideShare a Scribd company logo
1 of 37
化繁为简简化复杂的FLASH应用程序 谈熠 2010.5
简化开发,提高程序质量 简化开发 减少范错误的可能 降低范错误的频率 提高代码质量 精简代码实现
程序设计方面的应用
数据模型 和 E4X E4X:一个类似Xpath,针对XML数据检索方法 语法简单,速度快 适用的情况: XMLSOCKET XML为基础的HTTP服务或者文件服务 思路:XML、XMLLIST直接作为数据模型(Models)
varthePeople:XML =<people>  <person name="Mims Wright" suffix="III">    <age>27</age>    <aka>Mims H Wright</aka>    <aka>TehAWesoeomes!</aka>    <bio><!--[CDATA[This guy <b>rulz<b>!]]--></bio>   </person>  <person name="Roger Braunstein">          <age>26</age>    <aka>Rog</aka>    <aka>That guy</aka>    <bio><!--[CDATA[Likes food.]]--></bio>   </person> </people>;
E4X的用例 thePeople.person.age // 得到:<age>27</age> <age>26</age> thePeople.person.@name // 得到:XMLList: Mims Wright, Roger Braunstein thePeople.person.(age >= 21) // 得到: <person name="Mims Wright" suffix="III">    <age>27</age>    <aka>Mims H Wright</aka>    <aka>TehAWesoeomes!</aka>    <bio><!--[CDATA[This guy <b>rulz<b>!]]--></bio>   </person>
采用XML直接作为Model的思路 一种常见的情况 建议的方式 继承xMLList容器 通过 getter 和 setter 来提供需要进行逻辑处理的数据访问
元编程(Meta-programming) 一种根据在运行时的环境动态地获得、创建、修改程序所需要的类和对象的技巧。
一个简单AS元编程应用 Object.method1() Object.method2() Object.method3() Object[“method”+i]();
AS3中的元编程 ACTIONSCRIPT是一门基于Prototype的语言 flash.utils.* 提供了一套反射工具方法 两个AS3的元编程技巧: 反射 (Reflection) 方法缺失 (Method Missing)  两个编程概念 DRY Convention Over Configuration
反射 (Reflection) 工具: flash.utils.describeType 作用:返回一个对象的元数据的XML描述信息
反射的应用 classApplicationState {   publicstaticconstLOGIN:uint=1;   publicstaticconstLOADING:uint=2;   publicstaticconstPLAYING:uint=3; }
反射的应用 classApplicationState {   publicstaticconstLOGIN:uint=1;   publicstaticconstLOADING:uint=2;   publicstaticconstPLAYING:uint=3; }
反射的应用 classApplicationState {   publicstaticconstLOGIN:uint=1;   publicstaticconstLOADING:uint=2;   publicstaticconstPLAYING:uint=3;   privatestaticconststateNames:Object= {}; }
反射的应用 classApplicationState { ... publicstaticfunction init():void {   for each(varconstantName:XMLin describeType(ApplicationState).constant.@name)      { stateNames[ApplicationState[constantName.toString()]]= constantName.toString();      }   } } ...
反射的应用 classApplicationState {   ...   publicstaticfunctiongetStateNameByValue(val:uint):String   {     returnstateNames[val.toString()];   }  }
反射的应用 varcurrentState:uint=ApplicationState.LOADING; trace(currentState); // 1 trace( ApplicationState.getStateNameByValue(currentState) ); // "LOGIN"
概念1:干 干 —— 避免重复 DRY – Don’t Repeat Yourself 一种常见的重复操作: trace(“name:”+this.name+”, data:”+this.data);……
反射在调试时的应用 class Inspector /**  * 列出一个对象中的所有公开变量名,并把这些变量名放在一个 Vector.<String>   * 容器中  * @paramobj object of any kind  * @return 列出一个对象中的所有公开变量名,并把这些变量名放在一个   * Vector.<String> 容器中 */ publicstaticfunctionlistInstanceVariables(obj:*):Vector.<String> {   returnxmlListToStringList(describeType(obj).variable.@name); } publicstaticfunctiondumpInstanceVariables(obj:*):Vector.<String> {    returndumpProperty(listInstanceVariables(obj),obj); }
反射在调试时的应用 trace(Inspector. dumpInstanceVariables(this));
方法缺失 (Method Missing)  工具:flash.utils.Proxy 作用:重载AS对象默认的操作行为 原理: Object extends flash.utils.Proxy Object.methodName(arg0,arg1) Object.callProperty(“methodName”,args)
方法缺失 public dynamic class ClassA extends Proxy { flash_proxy override function callProperty(name:*, ...rest):*   {     trace(“请求调用方法:”+name)   } } varinstanceA:ClassA = new ClassA(); instanceA.doSomeThing(); // 请求调用方法:doSomeThing
概念2:习惯优于配置 习惯优于配置 Convention Over Configuration 惯例优于配置的宗旨是减轻配置文件的负担。我们要保留应用程序和程序框架的基本可扩展性,同时去掉无休止的配置信息。 AS的”方法缺失”技术非常适用于大配置量的情况。
元编程的使用建议 元编程的关键是你编写程序在它们运行的时候调整和修改它们自身。元编程被使用的越多,你的运行程序就越不象你所编写的源代码。这当然是这个模式的意义所在,不过同时也是危险所在。 调试普通代码已经不是件容易的事情,而要调试元编程所产生的短暂存在的对象则要更困难许多。 因此,一组完整的单元测试是使程序正常工作的关键。如果你的程序使用了大量的元编程技术,那么单元测试是绝对必不可少的。
对开发流程的思考
为了便于表达,我设置两个变量 代表:客户端组 client-side guys 代表:服务器组 server-side guys
常见的开发工作流程 … 一种紧密耦合的状态 tightly coupled 低效,易出错,难管理
解耦客户端的开发 吃过了吗? <hello>吃了吗</hello> 还没,您呢? {hello:“吃了吗”} …/hello/吃了吗 010011101001101
采用代理模式(Proxy Pattern) Server send() ServerProxy@connectionObject send() RealConnectionsend() RealConnection可能是 xml, json, bin socket, restful http … function send(){ connectionObject.send() }
用 flash.utils.Proxy优化代理实现 server.walkTo(x,y)   //  发出socket数据包 “WALKTO  X Y“ server.attach(targetId)  //  发出socket数据包 “ATTACK targetId“
优化后开发团队工作流程 系统整合 优点: ,[object Object]
工作效率提高,调试难度降低,[object Object]
QQ群。。。唉。。QQ群
谢谢,谈熠

More Related Content

Similar to [Flash开发者交流][2010.07.24]简化复杂的flash应用程序(谈熠) (7)

Correlog overview presentation 20101207
Correlog overview presentation 20101207Correlog overview presentation 20101207
Correlog overview presentation 20101207
 
Web开发基础
Web开发基础Web开发基础
Web开发基础
 
协同版操作培训
协同版操作培训协同版操作培训
协同版操作培训
 
OOo Vs. 007 - 微軟與昇陽的辦公室軟體大戰
OOo Vs. 007 - 微軟與昇陽的辦公室軟體大戰OOo Vs. 007 - 微軟與昇陽的辦公室軟體大戰
OOo Vs. 007 - 微軟與昇陽的辦公室軟體大戰
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础
 
Erlang Optimize
Erlang OptimizeErlang Optimize
Erlang Optimize
 
Flex 4.5 action data communication
Flex 4.5 action data communicationFlex 4.5 action data communication
Flex 4.5 action data communication
 

More from Shanda innovation institute

[Flash开发者交流][2010.11.28]swf文件格式和abc代码混淆工具(黄珏坤)
[Flash开发者交流][2010.11.28]swf文件格式和abc代码混淆工具(黄珏坤)[Flash开发者交流][2010.11.28]swf文件格式和abc代码混淆工具(黄珏坤)
[Flash开发者交流][2010.11.28]swf文件格式和abc代码混淆工具(黄珏坤)
Shanda innovation institute
 
[Flash开发者交流][2010.11.28]松耦合代码之开发方法与工具演示(刘争辉)
[Flash开发者交流][2010.11.28]松耦合代码之开发方法与工具演示(刘争辉)[Flash开发者交流][2010.11.28]松耦合代码之开发方法与工具演示(刘争辉)
[Flash开发者交流][2010.11.28]松耦合代码之开发方法与工具演示(刘争辉)
Shanda innovation institute
 
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
Shanda innovation institute
 
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
Shanda innovation institute
 
[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)
[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)
[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)
Shanda innovation institute
 
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)[.Net开发交流会][2010.06.19]better framework better life(吕国宁)
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)
Shanda innovation institute
 
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
Shanda innovation institute
 
[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)
[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)
[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)
Shanda innovation institute
 
Flash开发者交流][2010.05.30]flash 原型开发(刘磊)
Flash开发者交流][2010.05.30]flash 原型开发(刘磊)Flash开发者交流][2010.05.30]flash 原型开发(刘磊)
Flash开发者交流][2010.05.30]flash 原型开发(刘磊)
Shanda innovation institute
 
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
Shanda innovation institute
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
Shanda innovation institute
 
[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)
[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)
[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)
Shanda innovation institute
 
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
Shanda innovation institute
 
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
Shanda innovation institute
 
[Flash开发者交流][2010.03.28]flex中的数据绑定和列表模式(徐哲)
[Flash开发者交流][2010.03.28]flex中的数据绑定和列表模式(徐哲)[Flash开发者交流][2010.03.28]flex中的数据绑定和列表模式(徐哲)
[Flash开发者交流][2010.03.28]flex中的数据绑定和列表模式(徐哲)
Shanda innovation institute
 
[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)
[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)
[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)
Shanda innovation institute
 

More from Shanda innovation institute (20)

[Flash开发者交流][2010.11.28]swf文件格式和abc代码混淆工具(黄珏坤)
[Flash开发者交流][2010.11.28]swf文件格式和abc代码混淆工具(黄珏坤)[Flash开发者交流][2010.11.28]swf文件格式和abc代码混淆工具(黄珏坤)
[Flash开发者交流][2010.11.28]swf文件格式和abc代码混淆工具(黄珏坤)
 
[Flash开发者交流][2010.11.28]松耦合代码之开发方法与工具演示(刘争辉)
[Flash开发者交流][2010.11.28]松耦合代码之开发方法与工具演示(刘争辉)[Flash开发者交流][2010.11.28]松耦合代码之开发方法与工具演示(刘争辉)
[Flash开发者交流][2010.11.28]松耦合代码之开发方法与工具演示(刘争辉)
 
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
 
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
 
[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)
[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)
[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)
 
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)[.Net开发交流会][2010.06.19]better framework better life(吕国宁)
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)
 
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
 
[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)
[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)
[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)
 
Flash开发者交流][2010.05.30]flash 原型开发(刘磊)
Flash开发者交流][2010.05.30]flash 原型开发(刘磊)Flash开发者交流][2010.05.30]flash 原型开发(刘磊)
Flash开发者交流][2010.05.30]flash 原型开发(刘磊)
 
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
 
[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)
[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)
[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)
 
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
 
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
 
[Flash开发者交流][2010.03.28]flex中的数据绑定和列表模式(徐哲)
[Flash开发者交流][2010.03.28]flex中的数据绑定和列表模式(徐哲)[Flash开发者交流][2010.03.28]flex中的数据绑定和列表模式(徐哲)
[Flash开发者交流][2010.03.28]flex中的数据绑定和列表模式(徐哲)
 
[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)
[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)
[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)
 
[人本设计沙龙][2010.04.18]理性的设计(西乔)
[人本设计沙龙][2010.04.18]理性的设计(西乔)[人本设计沙龙][2010.04.18]理性的设计(西乔)
[人本设计沙龙][2010.04.18]理性的设计(西乔)
 
[人本设计沙龙][2010.04.18]产品体验的细节与整体把握
[人本设计沙龙][2010.04.18]产品体验的细节与整体把握[人本设计沙龙][2010.04.18]产品体验的细节与整体把握
[人本设计沙龙][2010.04.18]产品体验的细节与整体把握
 
[人本设计沙龙][2010.04.18]运营专业型社区的经验和反思(范凯)
[人本设计沙龙][2010.04.18]运营专业型社区的经验和反思(范凯)[人本设计沙龙][2010.04.18]运营专业型社区的经验和反思(范凯)
[人本设计沙龙][2010.04.18]运营专业型社区的经验和反思(范凯)
 
[人本设计沙龙][2010.04.18]开放平台(谭思亮)
[人本设计沙龙][2010.04.18]开放平台(谭思亮)[人本设计沙龙][2010.04.18]开放平台(谭思亮)
[人本设计沙龙][2010.04.18]开放平台(谭思亮)
 

[Flash开发者交流][2010.07.24]简化复杂的flash应用程序(谈熠)